// async和await是Promise语法糖，可以让我们以同步的方式去处理Promise的结果
// async用于修饰函数（function），被async修饰的函数称为同步函数，可以在函数内部使用await语法。
// async&await：把异步转同步，和瀑布流一样，也是一种下一次异步操作，需要等待上一次异步操作结束的解决方案。

function buy(name,food) {
    const random = Math.random();

    console.log(`${name}准备买${food}`);

    return new Promise((resolve,reject) => {
        setTimeout(()=> {
            // 成功和失败随机
            if (random <= 0.5) {
                resolve(food);
            } else {
                reject(food);
            } 
        },3000);
    });
}

function cook(name,food) {

    console.log(`${name}准备做${food}`);

    const random = Math.random();

    return new Promise((resolve,reject) => {
        setTimeout(()=> {
            // 成功和失败随机
            if (random <= 1) {
                resolve(food);
            } else {
                reject(food);
            } 
        },3000);
    });
}

async function start() {
    try {
        // await：接收一个Promise对象，将Promise的成功结果直接返回（语法糖）
        let result = await buy("陈科地","牛肉")
        let result2 = await cook("聂仔欣",result);
        console.log("大家一起吃饭，我们吃:",result2);
    // catch：如果Promise是reject状态（失败），那么需要通过catch的方式，获取失败结果
    } catch (e) {
        console.log("失败了！没有买到：",e)
    }
}

start();